// 父类

class Father {
  // 保护属性:  protected成员在自身和派生类中仍然可以访问
  protected money: number = 10000;
  // 私有属性: 当成员被标记成 private时，它就不能在声明它的类的外部访问
  private _privateMoney = 100;


	// 存取器
	setPrivateMoney(meony: number) {
		this._privateMoney = meony
	}

	getPrivateMoney() {
		return this._privateMoney
	}

  makeMoney(num: number) {
    this.money += num;
  }
}

// 子类：
class Son extends Father {
  // 实例
  // 公共属性 : 我们可以自由的访问程序里定义的成员
  public name: string;
  // 构造器
  constructor(name: string) {
    // 调用父类构造函数
    // 在子类构造器必须实现调用父类构造器
    super();
    // 实例属性
    this.name = name;

  }
  // 原型方法
  sayName() {
    console.log(this.name);
  }
  desc() {
    console.log(`我是${this.name}, 我有多少钱${this.money}`);
  }
}

const p1 = new Son("张三");
const p2 = new Son("李四");


console.log(p1.getPrivateMoney())

p1.setPrivateMoney(999)
console.log(p1.getPrivateMoney())